In general purpose microprocessors, registers may be separated into register banks (or files), such as an integer register bank and a floating-point register bank. Registers in different banks may differ in size and format, and there may not be a direct data path between register banks. Register allocation (RA) may play an important role in modern optimizing compilers. The task of RA may be to map symbolic registers to physical registers. In general, the register bank of a destination or source operand in an instruction may be determined by the opcode of the instruction. Hence, RA may simply assign symbolic registers to each physical register bank independently.
Domain-specific or embedded processors may have highly partitioned register banks. To allocate to these register banks, compilers may be tasked with choosing a register bank and a physical register in the bank for a symbolic register. However, these processors may have hardware constraints that cause register bank conflicts. Such conflicts may need to be resolved before a compiler chooses a register bank and a physical register in the bank for a symbolic register.